#include <REGX51.H>
#include <absacc.h>
#include <definicje.h>
#include <prototypy.h>

byte czekaj_na_klawisz(byte klawisz) //FF=cokolwiek, zwracam to cokolwiek
{									 
	int wcisniete;
	byte ret;

	do
	{
		#pragma asm	//czeka na cokolwiek
			czekaj_na_klawisz1:
			mov dptr, #0xF021  //to jest dobrze, w podreczniku sie pomylili
			movx a, @dptr
			mov b, a
			inc dptr
			movx a, @dptr
			anl a, b
			xrl a, #0xFF
			//jezeli acc jest rowny 0, to nie zostal wcisniety klawisz
			jz czekaj_na_klawisz1
			//jest ok
		#pragma endasm
		//dotad OK

		
		wcisniete=~(XBYTE[0xF021]+(XBYTE[0xF022]<<8));
		
		for(ret=0x10;wcisniete!=0;ret--){wcisniete<<=1;}
	}
	while(!(klawisz==(byte)0xFF || klawisz==ret));//petla konczy sie, kiedy warunek bedzie prawdziwy
	
	
	//w tym momencie mamy mape wcisnietych klawiszy w int

	
	
		

		



	#pragma asm
		//jezeli cos zostalo wcisniete:
		mov r0,#15
		czekaj_10ms:
		mov b, #0
		czekaj1:
		djnz b, czekaj1
		djnz r0, czekaj_10ms
		//po 10ms


		czekaj_na_puszczenie:
		mov dptr, #0xF021
		movx a, @dptr
		mov b, a
		inc dptr
		movx a, @dptr
		anl a, b
		//jezeli klawisz jest juz puszczony, acc bedzie rowny 0xFF
		cjne a, #0xFF, czekaj_na_puszczenie
	#pragma endasm	
	
	return ret;
}